package com.tzl.design_pattern.factory_pattern.simple_factory_pattern;

/**
 * 简单工厂，用于产生产品实例<br>
 * 适用场景： 适用于工厂类负责创建的对象较少的场景，且客户端只需要传入工厂类的参数，对于如何创建对象的逻辑不需要关心。<br>
 * 缺点：假如每种产品创建不仅仅只是实例化一个对象，还有其他逻辑需要处理，那么无法直接使用反射创建对象，避免不了很多的 if-else，或者swith，这样，每新增一个产品都需要修改工厂实现类。
 *
 * @author Zhilei Tang
 * @date Created in 2020/11/14 15:59
 */
public class SimpleFactoryTest {
  public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    SimpleFactory.createProduct("apple").grow();
    SimpleFactory.createProduct("orange").grow();
    //        SimpleFactory.createProduct("banana").grow();
    System.out.println("==============");
    SimpleFactory.createProduct2(Apple.class).grow();
    SimpleFactory.createProduct2(Orange.class).grow();
    SimpleFactory.createProduct2(null).grow();
  }
}
